package demo2;

/**
 * Description:
 * Date: 2025-10-15
 * Time: 20:15
 */
public class Test {
    //接口：定义一种行为规范而不提供具体实现的一种引用类型，用于让不同类以统一方式实现该功能
    //即当有一个类实现了某个接口时，说明它具有了这个接口中的功能，能通过这个结果来统一使用这个功能(多态思想)

    public static void eats(Animal animal) {
        animal.eat();
    }


    public static void main1(String[] args) {
        Bird bird = new Bird("小白",3);
        Dog dog = new Dog("大黄",5);
        Duck duck = new Duck("小毛",2);
        bird.eat();
        dog.eat();
        duck.eat();

    }

    public static void fly(IFlying iFlying) {
        iFlying.iFlying();
    }

    public static void run(IRunnig iRunnig) {
        iRunnig.iRunnig();
    }

    public static void swim(ISwimming iSwimming) {
        iSwimming.iSwimming();
    }

    public static void main2(String[] args) {
        Bird bird = new Bird("小白",3);
        Dog dog = new Dog("大黄",5);
        Duck duck = new Duck("小毛",2);
        bird.iFlying();
        dog.iRunnig();
        dog.iSwimming();
        duck.iFlying();
        duck.iSwimming();
        duck.iRunnig();
        //上面是可以直接用类的引用去调用重写接口中的方法来实现自己的功能
        //上面是面向过程的，能实现就行
        System.out.println("=================");
        //下面则是通过方法的向上转型，再经过动态绑定来实现自己的功能（多态思想）
        //下面是面向对象的。是一种规范，一种思想，不是单单用引用来调用方法是实现就行
        fly(bird);
        fly(duck);
        run(dog);
        run(duck);
        swim(dog);
        swim((duck));
        //swim(bird);//没有实现这个接口的类是不能进行向上转型的
    }

    //ISmalls这个接口继承了其它的接口，当有一个类实现了ISmalls这个接口时，就会间接的实现其它接口中的方法
    public static void test(ISmalls iSmalls) {
        iSmalls.iFlying();
        iSmalls.iSwimming();
        iSmalls.iRunnig();
    }

    public static void main(String[] args) {
        Robot robot = new Robot();
        test(robot);

    }
}
